package 高级进阶;

import org.junit.Test;

import java.util.*;

/**
 * @author Liangyaoyun
 */
//容器类继承自 j.l.Iterable，便于更灵活地组织和操纵数据。
//Java中常用的 List/Queue/Set 等接口，均为 Collection 的子接口。
//子类一般来说比父类的东西更多
//List和Set是兄弟关系
public class 容器 {
    @Test
    public void test(){
        // 快速创建一个List容器，可以直接打印输出
        // 虽然底层使用ArrayList实现，但无法调用添加和删除的API方法
        List<String> countries = Arrays.asList("中国", "葡萄牙", "日本", "西班牙", "葡萄牙");
        List<String> country = Arrays.asList("中国", "葡萄牙", "日本", "西班牙","123","145");
        System.out.println(countries);
        System.out.println("size():"+ countries.size());
        //equals是比较两者是否相等的意思
        System.out.println(countries.equals(country));
        System.out.println(countries.set(2,"巴基斯坦"));
        System.out.println(countries);
        System.out.println(countries.contains("巴基斯坦"));
        //从左到右开始遍历List判断这个东西在什么位置
        System.out.println(countries.indexOf("西班牙"));
        //从右到左判断这个东西在什么位置
        System.out.println(countries.lastIndexOf("西班牙"));
        //根据指定范围，截取List中的某段范围,左闭右开
        System.out.println("countries中1到3的范围"+countries.subList(1,3));
        //获取指定位置的元素
        System.out.println(countries.get(1));

    }
    @Test
    public void tese1(){
        //支持使用多态的用法，长度是10
        //list写法
        List<String> counties = new ArrayList<>(10);
        counties.add("中国");
        counties.add("日本");
        System.out.println(counties);
        System.out.println(counties.remove("日本")?"日本移除成功":"日本移除失败");
        System.out.println(counties);
        counties.add(1,"丹麦");
        counties.add(1,"法国");
        // 删除并返回counties中指定位置的元素
        System.out.println(counties);
        System.out.println("删除1号元素: " + counties.remove(1));
        System.out.println(counties);
    }
    @Test
    public void test2(){
        //比List多了些头尾操作
        LinkedList<String> g=new LinkedList<>();
        //addFirst是从第一个位置插入元素
        g.addFirst("1");
        g.addFirst("2");
        //addLast是从尾部插入
        g.addLast("0");
        g.addLast("5");
        g.addLast("6");
        g.addLast("7");
        System.out.println(g);
        //查看头部元素，如果不存在抛出异常
        System.out.println(g.peekFirst());
        //查看尾部元素，如果不存在抛出异常
        System.out.println(g.peekLast());
        //查看链表头
        System.out.println(g.getFirst());
        //查看链表尾
        System.out.println(g.getLast());
        //弹出链表头
        System.out.println(g.pollLast());
        //弹出链表尾
        System.out.println(g.pollLast());
        //移除链表头
        System.out.println(g.removeFirst());
        //移除链表尾
        System.out.println(g.removeLast());
        System.out.println(g);
    }
    @Test
    public void test3(){
        //时间戳:1970年1月1日0点0分
        //测试ArrayList的增加耗时
        long start=System.currentTimeMillis();
        ArrayList<Integer>g=new ArrayList<>();
        for (int i = 0; i < 100000; i++) {
            g.add(0,i);
        }
        long end=System.currentTimeMillis();
        System.out.println(end-start);
    }
    @Test
    public void test4(){
        //时间戳:1970年1月1日0点0分
        //测试LinkList的增加耗时
        long start=System.currentTimeMillis();
       LinkedList<Integer>g=new LinkedList<>();
        for (int i = 0; i < 100000; i++) {
            g.add(0,i);
        }
        long end=System.currentTimeMillis();
        System.out.println(end-start);
    }
}
